MRI R1, 1 ; R1 ist immer 1
MRI R2, _stack ; R2 zeigt auf Stapel
MRI R4, _heap ; R4 zeigt auf die nächste freie Stelle auf dem Heap
; NEW Main
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Main
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
MRI R5, _init_1
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von main
MRI R0, Main_main
_init_1:
MRI R0, _end ; Programm beenden
; CLASS Main
Main:
DAT 1, Main_a
DAT 1, Main_main
DAT 1, Main_c
DAT 1, Main_b
; METHOD a
Main_a:
ADD R2, R1
MMR (R2), R3 ; Alten Stapelrahmen sichern
MRR R3, R2 ; Aktuelle Stapelposition ist neuer Rahmen
; END METHOD a
; RETURN
; NEW Boolean
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Boolean
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; IF
; Referenz auf Parameter r
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; 0 : _Null
MRI R5, 0
ADD R2, R1
MMR (R2), R5
; EQ
MRM R5, (R2)
SUB R2, R1
MRM R6, (R2)
SUB R6, R5
ISZ R6, R6
MMR (R2), R6
Main_a_3:
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Main_a_2 ; Sprung zu END IF
; THEN
; CALL
; NEW Exception
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Exception
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; NEW Integer
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Integer
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 102 : _Integer
MRI R5, 102
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRI R5, Main_a_4
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von Print
MRI R0, Exception_Print
Main_a_4:
JPC R5, Main_a_2 ; Sprung zu END IF
; END IF
Main_a_2:
; Referenz auf Parameter r
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; DEREF
MRM R5, (R2)
MRM R5, (R5)
MMR (R2), R5
; UNBOX
MRM R5, (R2) ; Objektreferenz vom Stapel lesen
MRI R6, 1
ADD R5, R6 ; Adresse des Werts bestimmen
MRM R5, (R5) ; Wert auslesen
MMR (R2), R5 ; und auf den Stapel schreiben
MRM R5, (R2)
MRI R6, 1
SUB R6, R5
MRR R5, R6
JPC R5, Main_a_1
; IF
; Referenz auf Variable _self
MRI R5, -3
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; 0 : _Null
MRI R5, 0
ADD R2, R1
MMR (R2), R5
; EQ
MRM R5, (R2)
SUB R2, R1
MRM R6, (R2)
SUB R6, R5
ISZ R6, R6
MMR (R2), R6
Main_a_6:
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Main_a_5 ; Sprung zu END IF
; THEN
; CALL
; NEW Exception
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Exception
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; NEW Integer
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Integer
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 102 : _Integer
MRI R5, 102
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRI R5, Main_a_7
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von Print
MRI R0, Exception_Print
Main_a_7:
JPC R5, Main_a_5 ; Sprung zu END IF
; END IF
Main_a_5:
; Referenz auf Variable _self
MRI R5, -3
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; DEREF
MRM R5, (R2)
MRM R5, (R5)
MMR (R2), R5
MRI R5, Main_a_8
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von b
MRI R0, Main_b
Main_a_8:
; UNBOX
MRM R5, (R2) ; Objektreferenz vom Stapel lesen
MRI R6, 1
ADD R5, R6 ; Adresse des Werts bestimmen
MRM R5, (R5) ; Wert auslesen
MMR (R2), R5 ; und auf den Stapel schreiben
; ANDTHEN
MRM R5, (R2)
SUB R2, R1
MRM R6, (R2)
AND R6, R5
MMR (R2), R6
Main_a_1:
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRM R7, (R2) ; Ergebnis zwischenspeichern
MRI R5, 4
SUB R2, R5 ; Stack korrigieren
MMR (R2), R7 ; RETURN auf den Stack
SUB R3, R1
MRM R5, (R3) ; Rücksprungadresse holen
ADD R3, R1
MRM R3, (R3) ; Alten Stapelrahmen holen
MRR R0, R5 ; Rücksprung
; METHOD main
Main_main:
ADD R2, R1
MMR (R2), R3 ; Alten Stapelrahmen sichern
MRR R3, R2 ; Aktuelle Stapelposition ist neuer Rahmen
; IF
; Referenz auf Variable _self
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; 0 : _Null
MRI R5, 0
ADD R2, R1
MMR (R2), R5
; EQ
MRM R5, (R2)
SUB R2, R1
MRM R6, (R2)
SUB R6, R5
ISZ R6, R6
MMR (R2), R6
Main_main_2:
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Main_main_1 ; Sprung zu END IF
; THEN
; CALL
; NEW Exception
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Exception
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; NEW Integer
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Integer
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 102 : _Integer
MRI R5, 102
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRI R5, Main_main_3
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von Print
MRI R0, Exception_Print
Main_main_3:
JPC R5, Main_main_1 ; Sprung zu END IF
; END IF
Main_main_1:
; Referenz auf Variable _self
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; DEREF
MRM R5, (R2)
MRM R5, (R5)
MMR (R2), R5
; NEW Boolean
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Boolean
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 1 : _Boolean
MRI R5, 1
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRI R5, Main_main_4
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von c
MRI R0, Main_c
Main_main_4:
; UNBOX
MRM R5, (R2) ; Objektreferenz vom Stapel lesen
MRI R6, 1
ADD R5, R6 ; Adresse des Werts bestimmen
MRM R5, (R5) ; Wert auslesen
MMR (R2), R5 ; und auf den Stapel schreiben
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; IF
; Referenz auf Variable _self
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; 0 : _Null
MRI R5, 0
ADD R2, R1
MMR (R2), R5
; EQ
MRM R5, (R2)
SUB R2, R1
MRM R6, (R2)
SUB R6, R5
ISZ R6, R6
MMR (R2), R6
Main_main_6:
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Main_main_5 ; Sprung zu END IF
; THEN
; CALL
; NEW Exception
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Exception
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; NEW Integer
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Integer
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 102 : _Integer
MRI R5, 102
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRI R5, Main_main_7
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von Print
MRI R0, Exception_Print
Main_main_7:
JPC R5, Main_main_5 ; Sprung zu END IF
; END IF
Main_main_5:
; Referenz auf Variable _self
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; DEREF
MRM R5, (R2)
MRM R5, (R5)
MMR (R2), R5
; NEW Boolean
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Boolean
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 0 : _Boolean
MRI R5, 0
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRI R5, Main_main_8
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von c
MRI R0, Main_c
Main_main_8:
; UNBOX
MRM R5, (R2) ; Objektreferenz vom Stapel lesen
MRI R6, 1
ADD R5, R6 ; Adresse des Werts bestimmen
MRM R5, (R5) ; Wert auslesen
MMR (R2), R5 ; und auf den Stapel schreiben
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; IF
; IF
; Referenz auf Variable _self
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; 0 : _Null
MRI R5, 0
ADD R2, R1
MMR (R2), R5
; EQ
MRM R5, (R2)
SUB R2, R1
MRM R6, (R2)
SUB R6, R5
ISZ R6, R6
MMR (R2), R6
Main_main_11:
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Main_main_10 ; Sprung zu END IF
; THEN
; CALL
; NEW Exception
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Exception
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; NEW Integer
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Integer
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 102 : _Integer
MRI R5, 102
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRI R5, Main_main_12
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von Print
MRI R0, Exception_Print
Main_main_12:
JPC R5, Main_main_10 ; Sprung zu END IF
; END IF
Main_main_10:
; Referenz auf Variable _self
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; DEREF
MRM R5, (R2)
MRM R5, (R5)
MMR (R2), R5
; NEW Boolean
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Boolean
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 0 : _Boolean
MRI R5, 0
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRI R5, Main_main_13
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von a
MRI R0, Main_a
Main_main_13:
; UNBOX
MRM R5, (R2) ; Objektreferenz vom Stapel lesen
MRI R6, 1
ADD R5, R6 ; Adresse des Werts bestimmen
MRM R5, (R5) ; Wert auslesen
MMR (R2), R5 ; und auf den Stapel schreiben
; NOT
MRM R5, (R2)
MRI R6, 1
SUB R6, R5
MMR (R2), R6
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Main_main_9 ; Sprung zu END IF
; THEN
; 86 : _Integer
MRI R5, 86
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
JPC R5, Main_main_9 ; Sprung zu END IF
; END IF
Main_main_9:
; END METHOD main
MRI R5, 3
SUB R2, R5 ; Stack korrigieren
SUB R3, R1
MRM R5, (R3) ; Rücksprungadresse holen
ADD R3, R1
MRM R3, (R3) ; Alten Stapelrahmen holen
MRR R0, R5 ; Rücksprung
; METHOD c
Main_c:
ADD R2, R1
MMR (R2), R3 ; Alten Stapelrahmen sichern
MRR R3, R2 ; Aktuelle Stapelposition ist neuer Rahmen
; IF
; IF
; Referenz auf Variable _self
MRI R5, -3
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; 0 : _Null
MRI R5, 0
ADD R2, R1
MMR (R2), R5
; EQ
MRM R5, (R2)
SUB R2, R1
MRM R6, (R2)
SUB R6, R5
ISZ R6, R6
MMR (R2), R6
Main_c_4:
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Main_c_3 ; Sprung zu END IF
; THEN
; CALL
; NEW Exception
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Exception
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; NEW Integer
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Integer
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 102 : _Integer
MRI R5, 102
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRI R5, Main_c_5
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von Print
MRI R0, Exception_Print
Main_c_5:
JPC R5, Main_c_3 ; Sprung zu END IF
; END IF
Main_c_3:
; Referenz auf Variable _self
MRI R5, -3
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; DEREF
MRM R5, (R2)
MRM R5, (R5)
MMR (R2), R5
; IF
; Referenz auf Parameter b
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; 0 : _Null
MRI R5, 0
ADD R2, R1
MMR (R2), R5
; EQ
MRM R5, (R2)
SUB R2, R1
MRM R6, (R2)
SUB R6, R5
ISZ R6, R6
MMR (R2), R6
Main_c_7:
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Main_c_6 ; Sprung zu END IF
; THEN
; CALL
; NEW Exception
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Exception
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; NEW Integer
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Integer
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 102 : _Integer
MRI R5, 102
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRI R5, Main_c_8
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von Print
MRI R0, Exception_Print
Main_c_8:
JPC R5, Main_c_6 ; Sprung zu END IF
; END IF
Main_c_6:
; Referenz auf Parameter b
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; DEREF
MRM R5, (R2)
MRM R5, (R5)
MMR (R2), R5
MRI R5, Main_c_9
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von a
MRI R0, Main_a
Main_c_9:
; UNBOX
MRM R5, (R2) ; Objektreferenz vom Stapel lesen
MRI R6, 1
ADD R5, R6 ; Adresse des Werts bestimmen
MRM R5, (R5) ; Wert auslesen
MMR (R2), R5 ; und auf den Stapel schreiben
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Main_c_2 ; Sprung zu ELSE
; THEN
; END METHOD c
; RETURN
; NEW Integer
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Integer
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 71 : _Integer
MRI R5, 71
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRM R7, (R2) ; Ergebnis zwischenspeichern
MRI R5, 4
SUB R2, R5 ; Stack korrigieren
MMR (R2), R7 ; RETURN auf den Stack
SUB R3, R1
MRM R5, (R3) ; Rücksprungadresse holen
ADD R3, R1
MRM R3, (R3) ; Alten Stapelrahmen holen
MRR R0, R5 ; Rücksprung
JPC R5, Main_c_1 ; Sprung zu END IF
; ELSE
Main_c_2:
; END METHOD c
; RETURN
; NEW Integer
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Integer
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 84 : _Integer
MRI R5, 84
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRM R7, (R2) ; Ergebnis zwischenspeichern
MRI R5, 4
SUB R2, R5 ; Stack korrigieren
MMR (R2), R7 ; RETURN auf den Stack
SUB R3, R1
MRM R5, (R3) ; Rücksprungadresse holen
ADD R3, R1
MRM R3, (R3) ; Alten Stapelrahmen holen
MRR R0, R5 ; Rücksprung
; END IF
Main_c_1:
; METHOD b
Main_b:
ADD R2, R1
MMR (R2), R3 ; Alten Stapelrahmen sichern
MRR R3, R2 ; Aktuelle Stapelposition ist neuer Rahmen
; 78 : _Integer
MRI R5, 78
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; END METHOD b
; RETURN
; NEW Boolean
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Boolean
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 1 : _Boolean
MRI R5, 1
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRM R7, (R2) ; Ergebnis zwischenspeichern
MRI R5, 3
SUB R2, R5 ; Stack korrigieren
MMR (R2), R7 ; RETURN auf den Stack
SUB R3, R1
MRM R5, (R3) ; Rücksprungadresse holen
ADD R3, R1
MRM R3, (R3) ; Alten Stapelrahmen holen
MRR R0, R5 ; Rücksprung
; END CLASS Main
; CLASS Object
Object:
; END CLASS Object
; CLASS Integer
Integer:
; END CLASS Integer
; CLASS Boolean
Boolean:
; END CLASS Boolean
; CLASS Exception
Exception:
DAT 1, Exception_Print
; METHOD Print
Exception_Print:
ADD R2, R1
MMR (R2), R3 ; Alten Stapelrahmen sichern
MRR R3, R2 ; Aktuelle Stapelposition ist neuer Rahmen
; 69 : _Integer
MRI R5, 69
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 120 : _Integer
MRI R5, 120
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 99 : _Integer
MRI R5, 99
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 101 : _Integer
MRI R5, 101
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 112 : _Integer
MRI R5, 112
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 116 : _Integer
MRI R5, 116
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 105 : _Integer
MRI R5, 105
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 111 : _Integer
MRI R5, 111
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 110 : _Integer
MRI R5, 110
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 58 : _Integer
MRI R5, 58
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 32 : _Integer
MRI R5, 32
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; IF
; IF
; Referenz auf Parameter code
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; 0 : _Null
MRI R5, 0
ADD R2, R1
MMR (R2), R5
; EQ
MRM R5, (R2)
SUB R2, R1
MRM R6, (R2)
SUB R6, R5
ISZ R6, R6
MMR (R2), R6
Exception_Print_5:
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Exception_Print_4 ; Sprung zu END IF
; THEN
; CALL
; NEW Exception
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Exception
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; NEW Integer
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Integer
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 102 : _Integer
MRI R5, 102
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRI R5, Exception_Print_6
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von Print
MRI R0, Exception_Print
Exception_Print_6:
JPC R5, Exception_Print_4 ; Sprung zu END IF
; END IF
Exception_Print_4:
; Referenz auf Parameter code
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; DEREF
MRM R5, (R2)
MRM R5, (R5)
MMR (R2), R5
; UNBOX
MRM R5, (R2) ; Objektreferenz vom Stapel lesen
MRI R6, 1
ADD R5, R6 ; Adresse des Werts bestimmen
MRM R5, (R5) ; Wert auslesen
MMR (R2), R5 ; und auf den Stapel schreiben
; 101 : _Integer
MRI R5, 101
ADD R2, R1
MMR (R2), R5
; EQ
MRM R5, (R2)
SUB R2, R1
MRM R6, (R2)
SUB R6, R5
ISZ R6, R6
MMR (R2), R6
Exception_Print_3:
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Exception_Print_2 ; Sprung zu ELSE
; THEN
; 68 : _Integer
MRI R5, 68
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 105 : _Integer
MRI R5, 105
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 118 : _Integer
MRI R5, 118
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 105 : _Integer
MRI R5, 105
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 115 : _Integer
MRI R5, 115
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 105 : _Integer
MRI R5, 105
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 111 : _Integer
MRI R5, 111
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 110 : _Integer
MRI R5, 110
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 32 : _Integer
MRI R5, 32
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 98 : _Integer
MRI R5, 98
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 121 : _Integer
MRI R5, 121
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 32 : _Integer
MRI R5, 32
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 90 : _Integer
MRI R5, 90
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 101 : _Integer
MRI R5, 101
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 114 : _Integer
MRI R5, 114
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 111 : _Integer
MRI R5, 111
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
JPC R5, Exception_Print_1 ; Sprung zu END IF
Exception_Print_2:
; ELSEIF
; IF
; Referenz auf Parameter code
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; 0 : _Null
MRI R5, 0
ADD R2, R1
MMR (R2), R5
; EQ
MRM R5, (R2)
SUB R2, R1
MRM R6, (R2)
SUB R6, R5
ISZ R6, R6
MMR (R2), R6
Exception_Print_10:
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Exception_Print_9 ; Sprung zu END IF
; THEN
; CALL
; NEW Exception
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Exception
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; NEW Integer
ADD R2, R1
MMR (R2), R4 ; Referenz auf neues Objekt auf den Stapel legen
MRI R5, Integer
MMR (R4), R5
ADD R4, R1 ; Heap weiter zählen
MRI R5, 2
ADD R4, R5 ; Heap weiter zählen
; 102 : _Integer
MRI R5, 102
ADD R2, R1
MMR (R2), R5
; BOX
MRM R5, (R2) ; Wert vom Stapel nehmen
SUB R2, R1
MRM R6, (R2) ; Referenz auf neues Objekt holen (bleibt auf Stapel)
MRI R7, 1
ADD R6, R7 ; Speicherstelle in neuem Objekt berechnen
MMR (R6), R5 ; Wert in Objekt speichern
MRI R5, Exception_Print_11
ADD R2, R1
MMR (R2), R5 ; Rücksprungadresse auf den Stapel
; Statischer Aufruf von Print
MRI R0, Exception_Print
Exception_Print_11:
JPC R5, Exception_Print_9 ; Sprung zu END IF
; END IF
Exception_Print_9:
; Referenz auf Parameter code
MRI R5, -2
ADD R5, R3
ADD R2, R1
MMR (R2), R5
; DEREF
MRM R5, (R2)
MRM R5, (R5)
MMR (R2), R5
; UNBOX
MRM R5, (R2) ; Objektreferenz vom Stapel lesen
MRI R6, 1
ADD R5, R6 ; Adresse des Werts bestimmen
MRM R5, (R5) ; Wert auslesen
MMR (R2), R5 ; und auf den Stapel schreiben
; 102 : _Integer
MRI R5, 102
ADD R2, R1
MMR (R2), R5
; EQ
MRM R5, (R2)
SUB R2, R1
MRM R6, (R2)
SUB R6, R5
ISZ R6, R6
MMR (R2), R6
Exception_Print_8:
MRM R5, (R2) ; Bedingung vom Stapel nehmen
SUB R2, R1
ISZ R5, R5 ; Wenn 0, dann
JPC R5, Exception_Print_7 ; Sprung zu ELSE
; THEN
; 68 : _Integer
MRI R5, 68
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 101 : _Integer
MRI R5, 101
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 82 : _Integer
MRI R5, 82
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 101 : _Integer
MRI R5, 101
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 102 : _Integer
MRI R5, 102
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 32 : _Integer
MRI R5, 32
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 111 : _Integer
MRI R5, 111
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 102 : _Integer
MRI R5, 102
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 32 : _Integer
MRI R5, 32
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 78 : _Integer
MRI R5, 78
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 85 : _Integer
MRI R5, 85
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 76 : _Integer
MRI R5, 76
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 76 : _Integer
MRI R5, 76
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 45 : _Integer
MRI R5, 45
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 118 : _Integer
MRI R5, 118
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 97 : _Integer
MRI R5, 97
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 108 : _Integer
MRI R5, 108
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 117 : _Integer
MRI R5, 117
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 101 : _Integer
MRI R5, 101
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
JPC R5, Exception_Print_1 ; Sprung zu END IF
; ELSE
Exception_Print_7:
; 85 : _Integer
MRI R5, 85
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 110 : _Integer
MRI R5, 110
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 107 : _Integer
MRI R5, 107
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 110 : _Integer
MRI R5, 110
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 111 : _Integer
MRI R5, 111
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 119 : _Integer
MRI R5, 119
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 110 : _Integer
MRI R5, 110
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 32 : _Integer
MRI R5, 32
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 82 : _Integer
MRI R5, 82
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 117 : _Integer
MRI R5, 117
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 110 : _Integer
MRI R5, 110
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 116 : _Integer
MRI R5, 116
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 105 : _Integer
MRI R5, 105
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 109 : _Integer
MRI R5, 109
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 101 : _Integer
MRI R5, 101
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 69 : _Integer
MRI R5, 69
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 120 : _Integer
MRI R5, 120
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 99 : _Integer
MRI R5, 99
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 101 : _Integer
MRI R5, 101
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 112 : _Integer
MRI R5, 112
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 116 : _Integer
MRI R5, 116
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 105 : _Integer
MRI R5, 105
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 111 : _Integer
MRI R5, 111
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; 110 : _Integer
MRI R5, 110
ADD R2, R1
MMR (R2), R5
; WRITE
MRM R5, (R2)
SUB R2, R1
SYS 1, 5
; END IF
Exception_Print_1:
; END METHOD Print
MRI R5, 4
SUB R2, R5 ; Stack korrigieren
SUB R3, R1
MRM R5, (R3) ; Rücksprungadresse holen
ADD R3, R1
MRM R3, (R3) ; Alten Stapelrahmen holen
MRR R0, R5 ; Rücksprung
; END CLASS Exception
_stack: ; Hier fängt der Stapel an
DAT 50, 0
_heap: ; Hier fängt der Heap an
DAT 100, 0
_end: ; Programmende
